home *** CD-ROM | disk | FTP | other *** search
/ Zoom 2 / Zoom - Release 2 (1996)(Active Software)[!].iso / programming / amiga / visualarts / source / gadtools / gadtools.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-04-02  |  11.9 KB  |  403 lines

  1. /* ******************************************************************** */
  2. /* C code generated by:                            */
  3. /* Visual Arts Version 2.1                        */
  4. /* Copyright 1994-95 Danny Y. Wong  All rights reserved            */
  5. /* Calgary, Alberta (CANADA)                                    */
  6. /* Partial of the code is copyright by Jaba Development            */
  7. /* ******************************************************************** */
  8.  
  9. #include <VisualArts.h>
  10. #include <clib/VisualArts_protos.h>
  11.  
  12. #define ID_new                                        0
  13. #define ID_quit                                       1
  14. #define ID_selectmodel                                2
  15. #define ID_Import                                     3
  16. #define ID_comp1                                      4
  17. #define ID_comp                                       5
  18. #define ID_employees                                  6
  19. #define ID_level                                      7
  20. #define ID_cars                                       8
  21. #define ID_computer                                   9
  22. #define ID_color                                      10
  23.  
  24. #define GadToolsNumGads                        11
  25.  
  26. #include "GadTools_func.c" 
  27.  
  28. int newObj(struct VAobject VAObject);
  29. int quitObj(struct VAobject VAObject);
  30. int selectmodelObj(struct VAobject VAObject);
  31. int ImportObj(struct VAobject VAObject);
  32. int comp1Obj(struct VAobject VAObject);
  33. int compObj(struct VAobject VAObject);
  34. int employeesObj(struct VAobject VAObject);
  35. int levelObj(struct VAobject VAObject);
  36. int carsObj(struct VAobject VAObject);
  37. int computerObj(struct VAobject VAObject);
  38. int colorObj(struct VAobject VAObject);
  39.  
  40. int GadToolsIDCMP_MOUSEBUTTONS (struct VAobject VAObject);
  41. int GadToolsIDCMP_MOUSEMOVE (struct VAobject VAObject);
  42. int GadToolsIDCMP_INTUITICKS (struct VAobject VAObject);
  43. int GetPubScreen(void);
  44. void ClosePubScreen(void);
  45. int OpenGadToolsWindow(char windtitle[]);
  46. void CloseGadToolsWindow(void);
  47. int GadToolsHandler(void);
  48. int GadToolsMainHandler(void);
  49. void DrawGadToolsObjs(void);
  50. int main(int argc, char *argv[]);
  51.  
  52. UBYTE                *PubScrName = "Workbench";
  53. struct DrawInfo            *ScrDrawInfo = NULL;
  54. APTR                 VisualInfo = NULL;
  55. struct Screen            *Scr = NULL;
  56. struct Window            *GadToolsWnd = NULL;
  57. struct Menu            *GadToolsMenus = NULL;
  58. struct Gadget            *GadToolsGList = NULL;
  59. struct Gadget            *GadToolsGadgets[GadToolsNumGads];
  60. struct IntuiMessage         GadToolsMsg;
  61. UWORD                 GadToolsLeft = 88;
  62. UWORD                 GadToolsTop = 34;
  63. UWORD                 GadToolsWidth = 421;
  64. UWORD                 GadToolsHeight = 136;
  65. struct NewMenu GadToolsNewMenu1[] = {
  66.  
  67.   { NM_TITLE, "Project", 0 , 0 , 0 , 0,},
  68.   {  NM_ITEM, "About", 0 ,  0L , 0 , (APTR)AboutMenuObj,},
  69.   {  NM_ITEM, NM_BARLABEL, 0 , 0 , 0 , 0,},
  70.   {  NM_ITEM, "Open", 0 ,  0L , 0 , (APTR)OpenMenuObj,},
  71.   {  NM_ITEM, "Save", 0 ,  0L , 0 , (APTR)SaveMenuObj,},
  72.   {  NM_ITEM, NM_BARLABEL, 0 , 0 , 0 , 0,},
  73.   {  NM_ITEM, "Quit", 0 ,  0L , 0 , (APTR)QuitMenuObj,},
  74.  
  75.   { NM_TITLE, "Edit", 0 , 0 , 0 , 0,},
  76.   {  NM_ITEM, "Undo", "Z",  0L  , 0, (APTR)UndoMenuObj,},
  77.   {  NM_ITEM, NM_BARLABEL, 0 , 0 , 0 , 0,},
  78.   {  NM_ITEM, "Copy", "C",  0L  , 0, (APTR)CopyMenuObj,},
  79.   {  NM_ITEM, "Cut", "X",  0L  , 0, (APTR)CutMenuObj,},
  80.   {  NM_ITEM, "Paste", "V",  0L  , 0, (APTR)PasteMenuObj,},
  81.  
  82.   {   NM_END, NULL, 0 , 0 , 0 , 0,},
  83. };
  84.  
  85.  
  86. /* stringinfo for WB 1.x style string/integer gadgets */
  87.  
  88. struct StringExtend            GadToolsStrExt;    /* Extend String Gadget */
  89. struct TextAttr topaz8 = { (STRPTR)"topaz.font", 8, 0x00, 0x01 };
  90. struct TextAttr topaz800 = { (STRPTR)"topaz.font", 8, 0x00, 0x00 };
  91.  
  92. UBYTE *carsLabels[] = {
  93.     (UBYTE *)"GMC", 
  94.     (UBYTE *)"Ford", 
  95.     (UBYTE *)"Chrysler", 
  96.     (UBYTE *)"Toyota", 
  97.     (UBYTE *)"Honda", 
  98.     (UBYTE *)"Nissa", 
  99.     NULL
  100. };
  101.  
  102. UBYTE *computerLabels[] = {
  103.     (UBYTE *)"Amiga", 
  104.     (UBYTE *)"Apple", 
  105.     (UBYTE *)"IBM", 
  106.     (UBYTE *)"SUN", 
  107.     (UBYTE *)"HP", 
  108.     NULL
  109. };
  110.  
  111. WORD GadToolsGadTypes[] = {
  112.     BUTTON_KIND,
  113.     BUTTON_KIND,
  114.     STRING_KIND,
  115.     CHECKBOX_KIND,
  116.     MX_KIND,
  117.     CYCLE_KIND,
  118.     SLIDER_KIND,
  119.     SCROLLER_KIND,
  120.     LISTVIEW_KIND,
  121.     LISTVIEW_KIND,
  122.     PALETTE_KIND,
  123. };
  124.  
  125. struct NewGadget GadToolsNGads[] = {
  126.     186, 1, 97, 12, (UBYTE *)"New _Model",&topaz800, ID_new, PLACETEXT_IN, NULL, (APTR)newObj,
  127.     323, 66, 72, 11, (UBYTE *)"Ne_xt",&topaz800, ID_quit, PLACETEXT_IN, NULL, (APTR)quitObj,
  128.     4, 45, 174, 12, (UBYTE *)"", &topaz800, ID_selectmodel, PLACETEXT_LEFT, NULL, (APTR)selectmodelObj,
  129.     257, 15, 26, 11, (UBYTE *)"Import", &topaz800, ID_Import, PLACETEXT_LEFT, NULL, (APTR)ImportObj,
  130.     324, 2, 17, 9, (UBYTE *)"", &topaz800, ID_comp1, PLACETEXT_RIGHT, NULL, (APTR)comp1Obj,
  131.     194, 63, 89, 14, (UBYTE *)"Company", &topaz800, ID_comp, PLACETEXT_LEFT, NULL, (APTR)compObj,
  132.     130, 105, 153, 12, (UBYTE *)"# Employees   ", &topaz800, ID_employees, PLACETEXT_LEFT, NULL, (APTR)employeesObj,
  133.     289, 1, 23, 117, (UBYTE *)"", &topaz800, ID_level, PLACETEXT_LEFT, NULL, (APTR)levelObj,
  134.     4, 1, 174, 44, (UBYTE *)"", &topaz800, ID_cars, PLACETEXT_ABOVE, NULL, (APTR)carsObj,
  135.     6, 63, 109, 36, (UBYTE *)"", &topaz800, ID_computer, PLACETEXT_ABOVE, NULL, (APTR)computerObj,
  136.     130, 78, 152, 25, (UBYTE *)"", &topaz800, ID_color, PLACETEXT_ABOVE, NULL, (APTR)colorObj,
  137. };
  138.  
  139. ULONG GadToolsNTags[] = {
  140.     (GT_Underscore), '_', TAG_DONE,
  141.     (GT_Underscore), '_', TAG_DONE,
  142.     GTST_MaxChars, 255, (STRINGA_Justification), GACT_STRINGLEFT, TAG_DONE,
  143.     TAG_DONE,
  144.     (GTMX_Labels), (ULONG)&carsLabels[0], (GTMX_Active), 0, (GTMX_Spacing), 2, TAG_DONE,
  145.     (GTCY_Labels), (ULONG)&computerLabels[0], (GTCY_Active), 3, TAG_DONE,
  146.     (GTSL_Min), 0, (GTSL_Max), 100, (GTSL_Level), 10, (GTSL_LevelFormat), (ULONG)"%l3d", (GTSL_MaxLevelLen), 0, (GTSL_LevelPlace), PLACETEXT_LEFT, (GA_Immediate), TRUE, (GA_RelVerify), TRUE, (PGA_Freedom), LORIENT_HORIZ, TAG_DONE,
  147.     (GTSC_Top), 0, (GTSC_Total), 1210, (GTSC_Visible), 330, (GTSC_Arrows), 10, (GA_Immediate), TRUE, (GA_RelVerify), TRUE, (PGA_Freedom), LORIENT_VERT, TAG_DONE,
  148.     (GTLV_ShowSelected), 99, (GTLV_Labels), NULL, (GTLV_Top), 0, (GTLV_ScrollWidth), 16, (LAYOUTA_Spacing), 2, TAG_DONE,
  149.     (GTLV_Labels), NULL, (GTLV_Top), 0, (GTLV_ReadOnly), TRUE, (GTLV_ScrollWidth), 16, (LAYOUTA_Spacing), 0, TAG_DONE,
  150.     (GTPA_Depth), 2, (GTPA_Color), 1, (GTPA_ColorOffset), 0, TAG_DONE,
  151. };
  152.  
  153.  
  154. int GetPubScreen(void)
  155. {
  156.   if (!(Scr = LockPubScreen(PubScrName)))
  157.     return(1L);
  158.  
  159.   if (!(VisualInfo = GetVisualInfo(Scr, TAG_DONE)))
  160.     return(2L);
  161.  
  162.   if (!(ScrDrawInfo = GetScreenDrawInfo(Scr)))
  163.     return(3L);
  164.   return(0L);
  165. }
  166.  
  167. void ClosePubScreen(void)
  168. {
  169.   if (VisualInfo)
  170.     FreeVisualInfo(VisualInfo);
  171.   if (Scr)
  172.     UnlockPubScreen(NULL,  Scr);
  173.   if (ScrDrawInfo)
  174.     FreeScreenDrawInfo(Scr,  ScrDrawInfo);
  175. }
  176.  
  177. int OpenGadToolsWindow(char windtitle[80])
  178. {
  179.   struct NewGadget    NewGad;
  180.   struct Gadget       *Gad;
  181.   register UWORD i, j;
  182.   UWORD offsetx = Scr->WBorLeft;
  183.   UWORD offsety = Scr->WBorTop + Scr->Font->ta_YSize + 1;
  184.   int k=0;
  185.   int LVStrGads[] = {ID_selectmodel, -1 };
  186.  
  187.  
  188.   GadToolsStrExt.Font = NULL;
  189.   GadToolsStrExt.Pens[0] = 2;
  190.   GadToolsStrExt.Pens[1] = 0;
  191.   GadToolsStrExt.ActivePens[0] = 3;
  192.   GadToolsStrExt.ActivePens[1] = 2;
  193.   GadToolsStrExt.InitialModes  = 0;
  194.   GadToolsStrExt.EditHook = NULL;
  195.   GadToolsStrExt.WorkBuffer = NULL;
  196.  
  197.   if (!(Gad = CreateContext(&GadToolsGList)))
  198.       return(1L);
  199.  
  200.   for (i=0, j=0; i < GadToolsNumGads; i++)
  201.   {
  202.     CopyMem((char *)&GadToolsNGads[i], (char *)&NewGad, (long)sizeof(struct NewGadget));
  203.  
  204.     NewGad.ng_VisualInfo = VisualInfo;
  205.     NewGad.ng_LeftEdge += offsetx;
  206.     NewGad.ng_TopEdge  += offsety;
  207.  
  208.     if (GadToolsNTags[j] == GTLV_ShowSelected && GadToolsNTags[j+1] == 99)
  209.       GadToolsNTags[j+1] = (ULONG)GadToolsGadgets[LVStrGads[k++]];
  210.     GadToolsGadgets[i] = Gad = CreateGadgetA((ULONG)GadToolsGadTypes[i], Gad, &NewGad,
  211.     (struct TagItem *)&GadToolsNTags[j]);
  212.     if (GadToolsGadTypes[i] == STRING_KIND || GadToolsGadTypes[i] == INTEGER_KIND)
  213.     {
  214.     GadToolsGadgets[i]->Flags |= GFLG_STRINGEXTEND;
  215.     ((struct StringInfo *)GadToolsGadgets[i]->SpecialInfo)->Extension = &GadToolsStrExt;
  216.     }
  217.     while (GadToolsNTags[j])
  218.         j +=2;
  219.     j++;
  220.     if (!Gad)
  221.        return(2L);
  222.   }
  223.   GadToolsGadgets[0]->Activation |= GACT_TOGGLESELECT;
  224.  
  225.   if (!(GadToolsMenus = CreateMenus(GadToolsNewMenu1,
  226.      GTMN_FrontPen, 0L, TAG_DONE)))
  227.     return(3L);
  228.   LayoutMenus(GadToolsMenus, VisualInfo, GTMN_TextAttr,
  229.      &topaz800, GTMN_NewLookMenus, TRUE, TAG_DONE);
  230.  
  231.   if (!(GadToolsWnd = OpenWindowTags(NULL,
  232.       WA_Left,    GadToolsLeft,
  233.       WA_Top,     GadToolsTop,
  234.       WA_Width,    GadToolsWidth,
  235.       WA_Height,    GadToolsHeight + kWindowOffSetY,
  236.       WA_NewLookMenus, TRUE,
  237.       WA_IDCMP,    IDCMP_CLOSEWINDOW |  IDCMP_NEWSIZE | IDCMP_MOUSEBUTTONS | IDCMP_MOUSEMOVE | IDCMP_GADGETUP | IDCMP_GADGETDOWN | IDCMP_VANILLAKEY | IDCMP_INTUITICKS |  IDCMP_MENUPICK ,
  238.       WA_Flags,    WFLG_CLOSEGADGET | WFLG_DEPTHGADGET  |  WFLG_SMART_REFRESH | 
  239.              WFLG_ACTIVATE |  WFLG_DRAGBAR ,
  240.       WA_Gadgets,    GadToolsGList,
  241.       WA_Title,    windtitle,
  242.       WA_ScreenTitle,    "Visual Arts V2.2 Copyright 1994-95 Danny Y. Wong  All Rights Reserved.",
  243.       WA_PubScreen,    Scr,
  244.       WA_MinWidth,    160,
  245.       WA_MinHeight,    50,
  246.       WA_MaxWidth,    640,
  247.       WA_MaxHeight,    200,
  248.       TAG_DONE)))
  249.           return(3L);
  250.  
  251.   CreateGadToolsLists();
  252.   SetMenuStrip(GadToolsWnd, GadToolsMenus);
  253.   DrawGadToolsObjs();
  254.   GT_RefreshWindow(GadToolsWnd, NULL);
  255.   RefreshGadgets(GadToolsGadgets[0], GadToolsWnd, NULL);
  256.   GT_SetGadgetAttrs(GadToolsGadgets[8], GadToolsWnd, NULL,
  257.      GTLV_Labels, GadToolsLists[0], TAG_END);
  258.   GT_SetGadgetAttrs(GadToolsGadgets[9], GadToolsWnd, NULL,
  259.      GTLV_Labels, GadToolsLists[1], TAG_END);
  260.   return(0L);
  261. }
  262.  
  263. void CloseGadToolsWindow(void)
  264. {
  265.   if (GadToolsWnd)
  266.     CloseWindow(GadToolsWnd);
  267.   if (GadToolsGList)
  268.     FreeGadgets(GadToolsGList);
  269.   if (GadToolsMenus)
  270.   {
  271.     ClearMenuStrip(GadToolsWnd);
  272.     FreeMenus(GadToolsMenus);
  273.   }
  274. }
  275.  
  276. int GadToolsHandler(void)
  277. {
  278.   struct MenuItem    *menu;
  279.   struct IntuiMessage    *msg;
  280.   struct VAobject    VAObject;
  281.   int running    = 1;
  282.   int (*func)(struct VAobject VAObject);
  283.   ULONG class;
  284.   UWORD code;
  285.  
  286.   while (msg=GT_GetIMsg(GadToolsWnd->UserPort))
  287.   {
  288.     CopyMem((char *)msg, (char *)&GadToolsMsg, (long)sizeof(struct IntuiMessage));
  289.     class = msg->Class;
  290.     code  = msg->Code;
  291.  
  292.     VAObject.va_Window = (struct Window *)GadToolsWnd;
  293.     VAObject.va_Gadget = (struct Gadget *)msg->IAddress;
  294.     VAObject.va_IntuiMsg = (struct IntuiMessage *)msg;
  295.     VAObject.va_Flags = 0;
  296.     VAObject.va_UserData = 0;
  297.  
  298.     GT_ReplyIMsg(msg);
  299.     switch(class)
  300.     {
  301.  
  302.       case IDCMP_MOUSEBUTTONS :
  303.         running = GadToolsIDCMP_MOUSEBUTTONS (VAObject);
  304.         break;
  305.  
  306.       case IDCMP_MOUSEMOVE :
  307.         running = GadToolsIDCMP_MOUSEMOVE (VAObject);
  308.         break;
  309.  
  310.       case IDCMP_INTUITICKS :
  311.         running = GadToolsIDCMP_INTUITICKS (VAObject);
  312.         break;
  313.  
  314.       case IDCMP_NEWSIZE:
  315.        break;
  316.  
  317.       case IDCMP_CLOSEWINDOW:
  318.          return(0);
  319.          break;
  320.  
  321.       case IDCMP_GADGETUP:
  322.         func = (void *)((struct Gadget *)GadToolsMsg.IAddress)->UserData;
  323.         if (func != NULL)
  324.           running =  func(VAObject);
  325.         break;
  326.  
  327.  
  328.       case   IDCMP_VANILLAKEY:
  329.         switch(code)
  330.         {
  331.           case 'M':
  332.             GadToolsGadgets[0]->Flags ^= GFLG_SELECTED;
  333.             RefreshGList(GadToolsGadgets[0], GadToolsWnd, NULL, 1);
  334.             break;
  335.           case 'x':
  336.             ButtonSelected(GadToolsWnd, GadToolsGadgets[1]);
  337.             break;
  338.         }
  339.         break;
  340.  
  341.       case IDCMP_MENUPICK:
  342.         while ( code != MENUNULL)
  343.         {
  344.           VAObject.va_Window = (struct Window *)GadToolsWnd;
  345.           VAObject.va_Gadget = NULL;
  346.           VAObject.va_IntuiMsg = (struct IntuiMessage *)msg;
  347.           VAObject.va_Flags = NULL;
  348.           VAObject.va_UserData = 0;
  349.           menu = ItemAddress(GadToolsMenus, code);
  350.           func = (void *)(GTMENUITEM_USERDATA(menu));
  351.           running =  func(VAObject);
  352.           code =  menu->NextSelect;
  353.         }
  354.         break;
  355.     }
  356.   }
  357.   return(running);
  358. }
  359.  
  360. void DrawGadToolsObjs(void)
  361. {
  362.   GadToolsDrawRects(GadToolsWnd);
  363.  
  364. }
  365.  
  366. int GadToolsMainHandler(void)
  367. {
  368.   int running = 1;
  369.   ULONG windsig, signals;
  370.  
  371.   windsig = 1L << GadToolsWnd->UserPort->mp_SigBit;
  372.  
  373.   while (running == 1)
  374.   {
  375.     signals = Wait( windsig );
  376.     if (signals & windsig)
  377.     {
  378.       running = GadToolsHandler();
  379.     }
  380.   }
  381.   return(running);
  382. }
  383.  
  384. int main(int argc, char *argv[])
  385. {
  386.   int rc;
  387.  
  388.   if (!(GetPubScreen()))
  389.   {
  390.     for (rc=0; rc < 2; rc++)
  391.       GadToolsLists[rc]=GetNewList();
  392.     if (!(OpenGadToolsWindow("GadTools & Menu Demo")))
  393.     {
  394.       rc = GadToolsMainHandler();
  395.       CloseGadToolsWindow();
  396.     }
  397.     for (rc=0; rc < 2; rc++)
  398.       FreeList(GadToolsLists[rc]);
  399.     ClosePubScreen();
  400.   }
  401.   return(0L);
  402. }
  403.